package cn.dida.service;

import java.util.List;
import java.util.Map;

import cn.dida.model.Pageable;
import cn.dida.model.UserSession;

/**
 * 二维码 接口
 * @author weiwei
 */
public interface QrcodeService {

	/**
	 * 根据公司id查询公司生成的二维码
	 * @param companyId 公司id
	 * @param paramMap 查询条件
	 * @param page 分页游标
	 * @return Pageable<Map<String, Object>> 二维码分页列表
	 */
	Pageable<Map<String, Object>> queryAllQrcodeByCompnayID(Integer companyId, Map<String, Object> paramMap, Integer page);
	/**
	 * 二维码导出
	 * @param companyId 公司id
	 * @param paramMap 查询条件
	 * @return List<Map<String,Object>> 二维码列表数据
	 */
	List<Map<String,Object>> queryAllQrcodeByCompnayIDForExport(Integer companyId, Map<String, Object> paramMap);

	/**
	 * 生成二维码（普通）
	 * @param qcname 名称
	 * @param type 类型：1瓶码/盒码 ，2 箱码
	 * @param nubs 总数量
	 * @param userSession 当前登录用户
	 * @return Integer 受影响的记录行数
	 */
	Integer insertQrcode(String qcname, Byte type, Integer nubs, UserSession userSession);

	/**
	 * 根据公司id查询公司生成的二维码组合
	 * @param companyId 公司id
	 * @param paramMap 查询条件
	 * @param page 分页游标
	 * @return Pageable<Map<String, Object>> 组合码分页列表
	 */
	Pageable<Map<String, Object>> queryAllQrcodeGroupByCompnayID(Integer companyId, Map<String, Object> paramMap,
			Integer page);
	/**
	 * 组合码导出
	 * @param companyId 公司id
	 * @param paramMap 查询条件
	 * @return List<Map<String, Object>> 组合码列表数据
	 */
	List<Map<String, Object>> queryAllQrcodeGroupByCompnayIDForExport(Integer companyId, Map<String, Object> paramMap);
	/**
	 * 生成组合二维码
	 * @param qcname 名称
	 * @param pbcId 箱规id
	 * @param nubs 箱码扫描数量
	 * @param userSession 当前登录用户
	 * @return int 受影响的记录行数
	 */
	Integer insertQrcodeGroup(String qcname, Integer pbcId, Integer nubs, UserSession userSession);

	/**
	 * 查询二维码和商品绑定信息列表
	 * @param companyId 公司id
	 * @param paramMap 查询条件
	 * @param page 分页游标
	 * @return Pageable<Map<String, Object>> 产品绑定二维码 分页列表
	 */
	Pageable<Map<String, Object>> queryAllQrcodeProdcutCompnayID(Integer companyId, Map<String, Object> paramMap,
			Integer page);
	/**
	 * 二维码绑定数据列表（用于数据导出）
	 * @param companyId公司id
	 * @param paramMap 查询条件集合
	 * @return List<Map<String, Object>>
	 * @date 2016-12-07 12:02
	 * */
	List<Map<String, Object>> queryAllQrcodeProdcutCompnayIDForExport(Integer companyId, Map<String, Object> paramMap);

	/**
	 * 根据名称和编号获取限定数量的产品信息
	 * @param pname 名称
	 * @param limit 限制数量
	 * @param company_id 公司id
	 * @return List<Map<String, Object>> 产品信息列表
	 */
	List<Map<String, Object>> queryProductName(String pname, Integer limit, Integer company_id);

	/**
	 * 根据类型获取二维码或组合码信息列表
	 * @param qcname 名称
	 * @param type 类型：1瓶码/盒码，2箱码,3组合码
	 * @param limit 限定数量
	 * @param companyId 公司id
	 * @return List<Map<String, Object>> 二维码或组合码信息列表
	 */
	List<Map<String, Object>> queryQrcodeName(String qcname, Integer type ,Integer limit, Integer companyId);

	/**
	 * 查询同一名称二维码还有多少未绑定
	 * @param id 二维码id
	 * @param type 二维码类型:1瓶码/盒码，2箱码,3组合码
	 * @param companyid 公司名称
	 * @return  未绑定的二维码集合
	 */
	Map<String,Object>   queryQrcodeNoBangdingCount(Integer id,Integer type, Integer companyid);

	/**
	 *  产品二维码绑定
	 * @param paramMap 绑定数据
	 * @param type 二维码类型（1瓶码，2箱码，3组合码）
	 * @param userSession 当前登录用户
	 * @return Integer 新增绑定记录的id
	 */
	Integer insertQrcodeProduct(Map<String, Object> paramMap, Integer type,UserSession userSession);

	/**
	 * 组合码箱码结束编号改变，重新查询瓶码的结束编号
	 * @param id 组合箱码id
	 * @param companyid 公司id
	 * @return 组合箱码最大id
	 */
	Long queryQrcodeProductResetEndNoByXme(Integer id, Integer companyid);

	/**
	 * 解绑二维码和产品的关系
	 * @param id 产品绑定二维码关系表的记录id
	 * @param userSession 当前登录用户
	 * @param type 二维码类型（1瓶码，2箱码，3组合码）
	 * @return Integer 1 操作成功
	 */
	Integer deleteQrcodeProduct(Integer id, UserSession userSession, Integer type);

	/**
	 * 二维码明细列表
	 * @param companyId 公司id
	 * @param page 分页游标
	 * @return Pageable<Map<String, Object>> 明细分页列表
	 */
	Pageable<Map<String, Object>> queryQrcodeDetailByID(Integer companyId,String id, String proName, String qrId, Integer state,Integer page);

	/**
	 * 查看绑定分布
	 * @param companyId 公司id
	 * @param paramMap 查询条件
	 * @param page 分页游标
	 * @return Pageable<Map<String, Object>>  绑定分布分页列表
	 */
	Pageable<Map<String, Object>> queryQrcodeBindingByID(Integer companyId, Map<String, Object> paramMap, Integer page);

	/**
	 * 查看组合码绑定分布
	 * @param companyId 公司id
	 * @param paramMap 查询条件
	 * @param page 分页游标
	 * @return Pageable<Map<String, Object>> 组合码绑定分布分页列表
	 */
	Pageable<Map<String, Object>> queryQrcodegroupBindingByID(Integer companyId, Map<String, Object> paramMap,
			Integer page);

	/**
	 * 查看组合码明细
	 * @param companyId 公司id
	 * @param page 分页游标
	 * @return Pageable<Map<String, Object>> 组合码明细分页列表
	 */
	Pageable<Map<String, Object>> queryQrcodegroupDetailByID(Integer companyId, String  id,String proName, String qrId, Integer state,
			Integer page);

	/**
	 * 更换绑定id
	 * @param id 产品绑定二维码关系表的记录id
	 * @param pname 名称
	 * @param type 二维码类型（1瓶码，2箱码，3组合码）
	 * @param userSession 当前登录用户
	 * @return Integer 1 操作成功
	 */
	Integer updateQrcodeGroup(Integer id, String pname,String batch_nub, Integer type,Integer pid,
							  String produce_date, UserSession userSession);

	/**
	 * 普通二维码明细下载
	 * @param id 普通二维码id
	 * @param userSession 当前登录用户
	 * @return List<Map<String, Object>> 二维码明细列表
	 */
	List<Map<String, Object>> queryQrcodeInfoForDownload(Integer id,Integer isAutoDraw,UserSession userSession);

	/**
	 * 组合二维码明细下载
	 * @param id 组合二维码id
	 * @param userSession 当前登录用户
	 * @return List<Map<String, Object>> 组合二维码列表
	 */
	List<Map<String, Object>> queryQrcodeGroupInfoForDownload(Integer id,UserSession userSession);

	/**
	 * 修改下载文件的状态
	 * @param id 二维码id
	 */
	void updateDownlaodState(Integer id);

	/**
	 * 修改下载文件的状态（组合码）
	 * @param id 组合码状态
	 */
	void updateGroupDownlaodState(Integer id);
	
	/**
	 * 更改营销状态
	 * @param id
	 * @param userSession
	 * @param type
	 * @return
	 */
	Integer updateQrcodeProductActSta(Integer id, UserSession userSession, Integer type);
	
	/**
	 *更换产品 获取组合二维码的规格数量
	 * @author kelan
	 * @date 2017年4月10日
	 * @param id
	 * @return
	 */
	public Map<String, Object> queryQrcodePbcchangproduct(Integer id) ;
    
}
